package editor3d;
import java.util.*;

public class Clase extends Simbolo implements Cloneable{
	private String nombre = null;
	private TablaSimbolo tabla = null;
	private int tipoClase = -1;
// 	private int tamanio = -1;
	private String papa = null;
	private LinkedList <String> interfaces = new LinkedList <String>();
	private LinkedList <Clase> innerClases = new LinkedList <Clase>();
	private TablaMetodo metodos = new TablaMetodo();

	public void setMetodos(TablaMetodo metodos){
		this.metodos = metodos;
	}
	public TablaMetodo getMetodos(){
		return metodos;
	}

	public void setNombre(String nombre){
		this.nombre = nombre;
	}
	public String getNombre(){
		return nombre;
	}

	public void setInterfaces(LinkedList <String> interfaces){
		this.interfaces = interfaces;
	}
	public LinkedList <String> getInterfaces(){
		return interfaces;
	}

	public void setPapa(String papa){
		this.papa = papa;
	}
	public String getPapa(){
		return papa;
	}

	public void setTipo(int tipoClase){
		this.tipoClase = tipoClase;
	}
	public int getTipo(){
		return tipoClase;
	}

	public void setTamanio(int tamanio){
		this.tamanio = tamanio;
	}
	@Override
	public int getTamanio(){
		int temp = 0;
		for(int i = 0; i< tabla.size(); i++){
			temp += tabla.get(i).getTamanio();
		}
		return temp;
	}

	public void setTabla(TablaSimbolo tabla){
		this.tabla = tabla;
	}
	public TablaSimbolo getTabla(){
		return tabla;
	}

	/**
	* Tipos de clase
	*/
	public static final int TIPO_CLAS = 0;
	public static final int TIPO_ABST = 1;
	public static final int TIPO_INTER = 2;

	@Override
	public Clase clone(){
		Clase obj=null;
		obj=(Clase)super.clone();
		obj.tabla=(TablaSimbolo)obj.tabla.clone();
		obj.interfaces = (LinkedList <String>) obj.interfaces.clone();
		obj.innerClases = (LinkedList <Clase>) obj.innerClases.clone();
// 		obj.metodos = (TablaMetodo)obj.metodos.clone();
		return obj;
	}

	@Override
	public String toString(){
		String temp = "";
		temp = "Nombre: "+getNombre()+";\n"+
		"Tamanio: "+getTamanio()+";\n"+
		"Tipo: "+getTipo()+";\n"+
		"Papa: "+getPapa()+";\n"+
		"Interfaces: ";
		for(int i = 0; i<interfaces.size(); i++)
			temp += interfaces.get(i)+", ";
		if(getTabla().size() > 0)
			temp += "\n-Simbolos:\n"+getTabla();
		if(getMetodos().size() > 0)
			temp += "\n-Metodos:\n"+getMetodos();
		return temp;
	}
}